package com.fg.cloud.manager.mapper.system;

import java.util.List;
import java.util.Set;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import com.fg.cloud.manager.entry.system.MenuEntity;
import com.fg.cloud.manager.entry.system.vo.MenuVo;
import com.fg.cloud.manager.mapper.BaseMapper;

/**
 * @author ：
 * @date ： 2017年6月12日 下午7:13:00
 * @Desc ：菜单mapper
 */
public interface MenuMapper extends BaseMapper {

	/**
	  * Description:系统平台删除菜单
	  * @param id
	  * @param number
	  * @return
	  * @author shaoqiping
	  * @date 2017年11月6日下午3:16:00
	*/
	int sysDeletes(@Param("id") Long id, @Param("number") String number);
	/**
	  * Description:查询互换的控件
	  * @param seqOld
	  * @param parentId
	  * @param classify
	  * @return
	  * @author shaoqiping
	  * @date 2017年8月17日上午10:45:37
	*/
	MenuEntity selectByOldSeq(@Param("seqOld") Integer seqOld,@Param("parentId") Long parentId,@Param("classify") Integer classify);
	/**
	 * 查询指定级别的菜单,sql写于Mapper
	 * 
	 * @param index
	 *            parentId
	 * @return
	 */
	@Select("select * from t_system_menu where parentId = #{parentId} order by seq")
	List<MenuEntity> selectSpecifiedLevelMenu(int parentId);

	/**
	 * 查询所有菜单,sql写于Mapper
	 * 
	 * @param classify
	 *            菜单类型：0=平台菜单；1=厂家菜单；2=经销商菜单
	 * @return List
	 */
	@Select("select * from t_system_menu where (type=0 or type=1) and classify = #{classify} order by type asc, parentId ASC, seq ASC")
	List<MenuVo> selectByType(Integer classify);

	@Select("select * from t_system_menu where type=0 or type=1 order by type asc, parentId ASC, seq ASC")
	List<MenuVo> selectAll();

	Integer selectSeq(@Param("parentId") Long parentId, @Param("classify") Integer classify);

	/**
	 * 根据角色ID查询对应状态的菜单信息（作废）
	 * 
	 * @return List<MenuVo>
	 */
	List<MenuVo> selectByRole(Long roleId);

	/**
	 * 菜单管理界面 -- 查询列表数据
	 * 
	 * @param classify
	 *            菜单类型：0=平台菜单；1=厂家菜单；2=经销商菜单
	 * @return List<MenuVo>
	 */
	List<MenuVo> selectList(Integer classify);

	/**
	 * 角色列表界面-- 维护角色对应菜单
	 * 
	 * @param classify
	 *            菜单分类
	 * @param roleId
	 *            角色ID
	 * @return List<MenuVo>
	 */
	List<MenuVo> selectMenuByRoleId(@Param("classify") Integer classify, @Param("roleId") Long roleId);

	/**
	 * 用户登录-- 查询对应的菜单与按钮权限
	 * 
	 * @param classify
	 *            菜单分类
	 * @param userId
	 *            用户ID
	 * @return List<MenuVo>
	 */
	List<MenuVo> selectMenuByUserId(@Param("classify") Integer classify, @Param("userId") Long userId);

	/**
	 * 根据角色获取对应菜单ID集合
	 * 
	 * @param roleId
	 * @param classify
	 *            菜单类型：0=平台菜单；1=厂家菜单；2=经销商菜单
	 * @return List<Long>
	 */
	List<Long> selectByRoleId(@Param("roleId") Long roleId, @Param("classify") Integer classify);

	/**
	 * 根据用户获取对应菜单ID集合
	 * 
	 * @param roleId
	 * @param classify
	 *            菜单类型：0=平台菜单；1=厂家菜单；2=经销商菜单
	 * @return List<Long>
	 */
	List<Long> selectByUserId(@Param("userId") Long userId, @Param("classify") Integer classify);

	/**
	 * 根据用户获取对应的菜单按钮URL权限
	 * 
	 * @param userId
	 * @return
	 */
	Set<String> selectMenuUrlByUserId(@Param("userId") Long userId);

	/**
	 * 级联删除菜单绑定角色信息，sql写于Mapper
	 * 
	 * @param menuId
	 * @return
	 */
	int deleteByMenuId(Long[] ids);
	
	/**
	  * Description:查询删除关联的ID
	  * @return
	  * @author shaoqiping
	  * @date 2017年8月17日下午4:54:10
	*/
	Long[] selectByNumber(@Param("id") Long id, @Param("number") String number);
	/**
	 * 批量更改菜单级联状态，用作逻辑删除
	 * 
	 * @param id
	 * @param number
	 * @return
	 */
	int deletes(@Param("id") Long id, @Param("number") String number);
}
